/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2008，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	FieldDef.java
 * 模块说明：	
 * 修改历史：
 * Mar 17, 2008 - lxm - 创建。
 */
package com.hd123.rumba.runtime.entitydef;

import java.util.HashSet;
import java.util.Set;

import com.hd123.rumba.runtime.CPersistent;

/**
 * 字段定义
 * 
 * @author lxm
 * 
 */
public class FieldDef {

  private EntityDef entityDef;
  private String name;
  private String caption;
  private boolean notNull = false;
  private int minLength = -1;
  private int maxLength = -1;
  private Object minValue = null;
  private boolean minValueOpened = false;
  private Object maxValue = null;
  private boolean maxValueOpened = false;
  private boolean isEnum = false;
  private Set enumValues = new HashSet();
  private Class<CPersistent> embeddedClass = null;

  public FieldDef(EntityDef entityDef) {
    super();
    assert entityDef != null;
    this.entityDef = entityDef;
  }

  /**
   * 取得所有枚举可选值集合。
   * 
   * @return
   */
  public Set getEnumValues() {
    return enumValues;
  }

  /**
   * 取得对字段的引用名。
   * 
   * @return
   */
  public String getReferName() {
    String str = "";
    if (entityDef != null)
      str = entityDef.getClass().getName();
    str += "." + name;
    return str;
  }

  /** 所属实体定义对象 */
  public EntityDef getEntityDef() {
    return this.entityDef;
  }

  /** 字段名 */
  public String getName() {
    return name;
  }

  /** 字段名 */
  public void setName(String name) {
    this.name = name;
  }

  /** 标题 */
  public String getCaption() {
    return caption;
  }

  /** 标题 */
  public void setCaption(String caption) {
    this.caption = caption;
  }

  /** 是否非空 */
  public boolean isNotNull() {
    return notNull;
  }

  /** 是否非空 */
  public void setNotNull(boolean notNull) {
    this.notNull = notNull;
  }

  /** 最小长度 */
  public int getMinLength() {
    return minLength;
  }

  /** 最小长度 */
  public void setMinLength(int minLength) {
    this.minLength = minLength;
  }

  /** 最大长度 */
  public int getMaxLength() {
    return maxLength;
  }

  /** 最大长度 */
  public void setMaxLength(int maxLength) {
    this.maxLength = maxLength;
  }

  /** 最小取值 */
  public Object getMinValue() {
    return minValue;
  }

  /** 最小取值 */
  public void setMinValue(Object minValue) {
    this.minValue = minValue;
  }

  /** 最小取值是否开区间 */
  public boolean isMinValueOpened() {
    return minValueOpened;
  }

  /** 最小取值是否开区间 */
  public void setMinValueOpened(boolean minValueOpened) {
    this.minValueOpened = minValueOpened;
  }

  /** 最大取值 */
  public Object getMaxValue() {
    return maxValue;
  }

  /** 最大取值 */
  public void setMaxValue(Object maxValue) {
    this.maxValue = maxValue;
  }

  /** 最大取值是否开区间 */
  public boolean isMaxValueOpened() {
    return maxValueOpened;
  }

  /** 最大取值是否开区间 */
  public void setMaxValueOpened(boolean maxValueOpened) {
    this.maxValueOpened = maxValueOpened;
  }

  /** 是否是枚举类型 */
  public boolean isEnum() {
    return isEnum;
  }

  /** 是否是枚举类型 */
  public void setEnum(boolean isEnum) {
    this.isEnum = isEnum;
  }

  /** 对于指向服务类的字段所对应的实体属性特性类 */
  public Class<CPersistent> getEmbeddedClass() {
    return embeddedClass;
  }

  /** 对于指向服务类的字段所对应的实体属性特性类 */
  public void setEmbeddedClass(Class<CPersistent> embeddedClass) {
    this.embeddedClass = embeddedClass;
  }
}
